package com.xywy.bloodandroid.bloodSync;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.VolleyError;
import com.google.gson.Gson;
import com.xywy.bloodandroid.bean.BloodPressureData;
import com.xywy.bloodandroid.bean.BloodPresureDataFromServer;
import com.xywy.bloodandroid.bean.User;
import com.xywy.bloodandroid.dao.BaseDao;
import com.xywy.bloodandroid.dao.BloodPressureDataDao;
import com.xywy.bloodandroid.dao.BloodPressureDataDao.Properties;
import com.xywy.bloodandroid.fragment.BloodFragment;
import com.xywy.bloodandroid.util.MD5;
import com.xywy.bloodandroid.vollery.GetRequest;
import com.xywy.bloodandroid.vollery.OnVolleyResponseListener;
import com.xywy.bloodandroid.vollery.PostRequest;
import com.xywy.bloodandroid.vollery.VolleyManager;

import de.greenrobot.dao.query.QueryBuilder;

public class BloodSyncUtil {
//	SharedPreferences sp;
//
//	String userid = null;
//	private Editor editor;
//
//	public static final String SECRETKEY_WEIGHT_SCALEF = "213aBc$l;@13";
//	// public static final String SECRETKEY_BLOOD_PRESURE = "2CV3aBc$l;@";
//	public static final String TAG = "ISyncBleDevice";
//	private Context context;
//	
//	public BloodSyncUtil(Context context){
//		this.context = context;
//		sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
//		editor = sp.edit();
//		initDAO();
//	}
//	public void syncDataFormServer() {
//		try {
//			userid = User.getInstance(context).getUserid();
//		} catch (Exception e) {
//			// TODO: handle exception
//		}
//
//		if (userid == null || "".equals(userid)) {
//			return;
//		}
//		long lastDownLoadTime = sp.getLong("last_download_blood_presure_time",
//				1000); // 最后的下载时间；
//		String device_id = "temp_automactily_device_identify";
//		String appCount = "xywy_tizhong";
//		String dataType = "xueya";
//		// userid
//		String time = (lastDownLoadTime / 1000) + "";
//		String maxItem = "200";
//		String curPage = "1";
//		String sn = "";
//		try {
//			System.out.println("sn  之前----" + SECRETKEY_WEIGHT_SCALEF
//					+ device_id + dataType + userid + time + maxItem + curPage
//					+ appCount);
//			System.out.println(SECRETKEY_WEIGHT_SCALEF);
//			System.out.println("device_id " + device_id);
//			System.out.println("dataType " + dataType);
//			System.out.println("userid " + userid);
//			System.out.println("time " + time);
//			System.out.println("maxItem " + maxItem);
//			System.out.println("curPage " + curPage);
//			System.out.println("appCount " + appCount);
//			sn = MD5.md5s(SECRETKEY_WEIGHT_SCALEF + device_id + dataType
//					+ userid + time + maxItem + curPage + appCount);
//			System.out.println(sn);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		String urlStr = "http://api.yun.xywy.com/index.php/api/getdata/data/"
//				+ device_id + "/" + appCount + "/" + dataType + "/" + userid
//				+ "/" + time + "/" + maxItem + "/" + curPage + "/" + sn + "/";
//		GetRequest<String> request = new GetRequest<String>(urlStr,
//				String.class, new OnVolleyResponseListener<String>() {
//
//					@Override
//					public void onError(VolleyError volleyError) {
//						volleyError.printStackTrace();
//					}
//
//					@Override
//					public void onSuccess(String response) {
//						if (response != null) {
//							System.out.println(response);
//							parseJson(response);
//						} else {
//							Toast.makeText(context, "同步数据失败",
//									Toast.LENGTH_SHORT).show();
//						}
//					}
//				});
//		request.setIsParseJson(false);
//		VolleyManager.addRequest(request, "syncblooddata");
//	}
//
//	public void parseJson(String result) {
//		List<BloodPresureDataFromServer> datas = new ArrayList<BloodPresureDataFromServer>();
//		Log.d(TAG, "血压：解析从服务器上获取数据 ");
//		try {
//			JSONObject jsonObject = new JSONObject(result);
//			int status = jsonObject.getInt("status");
//			if (status == 0) { // 正确与服务器交互；
//				JSONArray array = jsonObject.optJSONArray("data");
//				for (int i = 0; i < array.length(); i++) {
//					JSONObject item = (JSONObject) array.get(i);
//					BloodPresureDataFromServer bs = new BloodPresureDataFromServer();
//					bs.setXywy_userid(item.optString("xywy_userid"));
//					bs.setApp_user_id(item.optString("app_user_id"));
//					bs.setDatatime(Long.parseLong(item.optString("datatime")));
//					bs.setHigh(Float.parseFloat(item.optString("high")));
//
//					bs.setHigh(Float.parseFloat(item.optString("high")));
//					bs.setLow(Float.parseFloat(item.optString("low")));
//					bs.setHeart(Float.parseFloat(item.optString("heart")));
//					bs.setApp_data(item.optString("app_data"));
//					bs.setShou_data(item.optString("high"));
//					datas.add(bs);
//
//				}
//				Log.d(TAG, "血压：成功获取数据 ");
//				if (datas != null)
//					dataCall(datas);
//			} else {
//				editor.putLong("last_download_blood_presure_time",
//						System.currentTimeMillis()).commit();
//			}
//			// 这个时候 就该是上传的时间了吧
//		} catch (JSONException e) {
//			e.printStackTrace();
//		}
//
//	}
//
//	public void dataCall(List<BloodPresureDataFromServer> lists) {
//
//		// 3 当数据正常处理之后 ， 开始上传1中获取到的数据；
//		if (lists == null || lists.size() < 1) {
//			Log.d(TAG, "血压： 当前数据获取失败，或者解析异常， 导致同步体重数据库失败！");
//			uploadDataToServer();
//			return;
//		}
//		System.out.println("血压计从服务器同步并且插入");
//		for (BloodPresureDataFromServer list : lists) {
//			long date = (long) (list.getDatatime() * 1000); // *1000
//															// 因为服务器上为ios
//			if (!dataCanInsert(date)) {
//				continue;
//			}
//			BloodPressureData data = new BloodPressureData(null,
//					list.getHeart(), list.getHigh(), list.getLow(), "State",
//					"temp_automactily_device_identify",
//					"temp_handly_device_identify", date);
//			bloodDao.insert(data);
//		}
//		// 将数据保存之后，获取最后一条的时间来替换本地数据；
//		editor.putLong("last_download_blood_presure_time",
//				(long) (lists.get(lists.size() - 1).getDatatime() * 1000))
//				.commit();
//		uploadDataToServer();
//		setChange();
//	}
//
//	/**
//	 * 
//	 * @return
//	 */
//
//	private boolean dataCanInsert(long time) {
//		QueryBuilder<BloodPressureData> qb = bloodDao.queryBuilder();
//		qb.where(Properties.Date.gt(time - 1000));
//		qb.where(Properties.Date.gt(time + 1000));
//		List<BloodPressureData> list = qb.list();
//		if (list != null && list.size() > 0) {
//			return false;
//		}
//		return true;
//	}
//
//	private final String sort = "xueya";
//	private String URL_UPLOAD = "http://api.yun.xywy.com/index.php/api/setdata/data_all/";
//
//	private BloodPressureDataDao bloodDao;
//
//	private void uploadDataToServer() {
//		// data.setDate(data.getDate() / 1000);
//		System.out.println("uploadDataToServer----");
//		HashMap<String, String> params = new HashMap<String, String>();
//		params.put("app_username", "xywy_tizhong");
//		try {
//			String userid = User.getInstance(context).getUserid();
//		} catch (Exception e) {
//			// TODO: handle exception
//		}
//
//		if (userid == null || "".equals(userid)) {
//			return;
//		}
//		params.put("xywy_userid", userid);
//		params.put("sort", sort);
//		// -------------------
//		final List<BloodPressureData> pressuerDatas = getUnuploadData();
//		String dataStr = turn2ServerJsonData(pressuerDatas, userid);
//		params.put("data", dataStr);
//		System.out.println("data---str----" + dataStr);
//		params.put("datatime", System.currentTimeMillis() / 1000 + "");
//		// -------------------
//		String sn = BloodFragment.SECRETKEY_WEIGHT_SCALEF + userid + sort
//				+ dataStr + "xywy_tizhong";
//		try {
//			params.put("sn", MD5.md5s(sn));
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//
//		PostRequest<String> post = new PostRequest<String>(URL_UPLOAD,
//				String.class, new OnVolleyResponseListener<String>() {
//
//					@Override
//					public void onError(VolleyError volleyError) {
//						volleyError.printStackTrace();
//					}
//
//					@Override
//					public void onSuccess(String response) {
//						if (response == null) {
//							return;
//						}
//						try {
//							JSONObject json = new JSONObject(response);
//							int status = json.optInt("status");
//							if (status == 0) {
//								// bloodDao.insert(blood_data);
//								// 将数据保存之后，获取最后一条的时间来替换本地数据；
//								editor.putLong(
//										"last_download_blood_presure_time",
//										(long) (pressuerDatas.get(pressuerDatas
//												.size() - 1).getDate()))
//										.commit();
//								// showToast("上传成功");
//							}
//						} catch (Exception e) {
//							e.printStackTrace();
//						}
//						System.out.println("------------" + response);
//					}
//				});
//		post.setIsParseJson(false);
//		post.setParams(params);
//		System.out.println(params);
//		VolleyManager.addRequest(post, "111");
//	}
//
//	/**
//	 * 获得需要上传的数据
//	 * 
//	 * @return
//	 */
//	public List<BloodPressureData> getUnuploadData() {
//		long lastSaveTime = sp
//				.getLong("last_download_blood_presure_time", 1000); // 最后的上传时间
//		Log.e("time---", lastSaveTime + "");
//		QueryBuilder<BloodPressureData> qb = bloodDao.queryBuilder();
//		qb.orderAsc(Properties.Date).where(Properties.Date.gt(lastSaveTime));
//		Log.e(TAG, "血压： 从本地获取需要上传的数据: " + qb.list().size());
//		return qb.list();
//	}
//
//	/**
//	 * 将数据库中提取出来的数据转换成服务器的been
//	 * 
//	 * @param data
//	 */
//	private String turn2ServerJsonData(List<BloodPressureData> datas,
//			String userID) {
//		Gson gson = new Gson();
//		List<BloodPresureDataFromServer> bloodServers = new ArrayList<BloodPresureDataFromServer>();
//		for (BloodPressureData data : datas) {
//			BloodPresureDataFromServer dataFormServer = new BloodPresureDataFromServer();
//			dataFormServer.setApp_data(data.getDevice_id());
//			dataFormServer.setApp_user_id("");
//			dataFormServer.setDatatime(data.getDate() / 1000);// 时间上面已经处理
//			dataFormServer.setHeart(data.getHeartRate());
//			dataFormServer.setHigh(data.getHighPressure());
//			dataFormServer.setLow(data.getLowPressure());
//			dataFormServer.setShou_data(data.getHand_str());
//			dataFormServer.setXywy_userid(userID);
//			bloodServers.add(dataFormServer);
//		}
//		return gson.toJson(bloodServers);
//	}
//	
//	
//	private void initDAO() {
//		BaseDao baseDao = BaseDao.getInstance(context);
//		bloodDao = baseDao.getBloodPressureDataDao();
//	}
}
